3维图像处理的新星 |
您所在的位置:网站首页 › apk obb合并 › 3维图像处理的新星 |
听说Open3D很好用,我先学习学习,后面再转战PCL,毕竟PCL是点云届的经典大佬*.*
本人使用的是python版本噢:) 1.官网功能介绍及例程 http://www.open3d.org/docs/release/tutorial/geometry/index.html 也可以参考这位朋友整理的Open3D算法资料: https://blog.csdn.net/qq_40985985/article/details/108715871?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.control 2.环境配置 ubuntu18.04下可以使用pip命令: pip install open3d 安装完毕后,在终端使用python: yy@yy:~$ python Python 3.7.6 (default, Jan 8 2020, 19:59:22) [GCC 7.3.0] :: Anaconda, Inc. on linux Type "help", "copyright", "credits" or "license" for more information. >>> import open3d >>>如果没有报错说明安装成功>.>> import open3d as o3d >>> pcd = o3d.io.read_point_cloud("/home/yy/文档/pointcloud/desk_1.pcd") ###输入被读取文件的路径 >>> print(pcd) PointCloud with 1595906 points. >>> import numpy as np >>> print(np.asarray(pcd.points)) [[-0.7070244 -0.52971417 1.2640001 ][-0.7070244 -0.52084869 1.2640001 ][-0.7070244 -0.51198316 1.2640001 ]...[-0.76719701 -0.32806134 1.2508162 ][-0.77002394 -0.32122216 1.2594384 ][-0.76220942 -0.31320193 1.2549695 ]] >>> o3d.visualization.draw_geometries([pcd],zoom=0.3412,front=[0.4257, -0.2125, -0.8795],lookat=[2.6172, 2.0475, 1.532],up=[-0.0694, -0.9768, 0.2024]) 执行完毕后会显示出我们读取文件的3d图像: 结果如下: PS:可以使用键盘上的-或者+改变点的大小 PPS:键入n可以隐藏或者显示法向量,使用键盘上的-或者+改变点的大小以及法线的长短 3.5 点云上色 1)paint_uniform_color 将所有点绘制为统一的颜色,颜色范围在[0,1]的RGB空间中。 >>> downpcd.paint_uniform_color([1, 0.5, 0]) PointCloud with 1595906 points. >>> o3d.visualization.draw_geometries([downpcd],zoom=0.7,front=[0.5439, -0.2333, -0.8060],lookat=[2.4615, 2.1331, 1.338],up=[-0.1781, -0.9708, 0.1608])经过体素下采样后的点云上色效果:
ply格式的点云数据呈现的效果: >>> chair = o3d.io.read_point_cloud("/home/yy/文档/pointcloud/chair1.ply") >>> hull, _ = chair.compute_convex_hull() >>> hull_ls = o3d.geometry.LineSet.create_from_triangle_mesh(hull) >>> hull_ls.paint_uniform_color((1, 0, 0)) >>> o3d.visualization.draw_geometries([chair, hull_ls])
逛了下相关博客,据说可能是点数太多。我的数据有1595906 points 😦 fine,我用下采样后的数据试试: import open3d as o3d import numpy as np import matplotlib.pyplot as plt pcd = o3d.io.read_point_cloud("/home/yy/文档/pointcloud/desk_1.pcd") print(pcd) downpcd = pcd.voxel_down_sample(voxel_size=0.03) print(downpcd) with o3d.utility.VerbosityContextManager(o3d.utility.VerbosityLevel.Debug) as cm:labels = np.array(downpcd.cluster_dbscan(eps=0.02, min_points=5, print_progress=True)) max_label = labels.max() colors = plt.get_cmap("tab20")(labels / (max_label if max_label > 0 else 1)) colors[labels ] 10%!!!!!!解决问题啦!将集群半径设置大一点,因为我的原始数据排列紧密,如果半径设置得大,会不容易分开 labels = np.array(downpcd.cluster_dbscan(eps=0.5, min_points=5, print_progress=True))其中,eps参数:代表epsilon社区的最大半径,如果数据点的相互距离小于或等于指定的epsilon,那么它们将是同一类的。换句话说,它是DBSCAN用来确定两个点是否相似和属于同一类的距离。更大的epsilon将产生更大的簇(包含更多的数据点),更小的epsilon将构建更小的簇。如果取值太小,集群将被分割的越来越小; min_points:在一个邻域的半径内minPts数的邻域被认为是一个簇。注意!初始点包含在minpoints中。一个较低的minpoints帮助算法建立更多的集群与更多的噪声或离群值,较高的minpoints将确保更健壮的集群,但如果集群太大,较小的集群将被合并到较大的集群中。 [Open3D DEBUG] Precompute Neighbours Precompute Neighbours[========================================] 100% [Open3D DEBUG] Done Precompute Neighbours [Open3D DEBUG] Compute Clusters [Open3D DEBUG] Done Compute Clusters: 4===========>] 97%
生成平面方程: Plane equation: -0.02x + 0.94y + 0.34z + -0.31 = 0 PPPPS:今天才发现原来ubuntu自带有截图快捷键,而且可以根据自己喜好修改!!!啊,我太蠢了 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |